#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>//strerror函数
#include <errno.h>//在这个库中定义了全局变量errno，因为linux内核是用C语言写的，所以系统提供的也是C式接口，很多地方可以使用errno

#define N 10

const char* err_string[] = {
     "Success",
     "open err",
     "other err"
};//退出码也可以自定义，使用strerror打印的只是C语言内置的退出码，所以在linux使用echo $?打印出来的退出码和strerror不太对应


//flag 1
//typedef void (*callback_t)();//函数指针callback_t，返回类型为void，没有参数
//void Worker()
//{
//     int cnt = 10;
//     while(cnt)
//     {
//         printf("I am child process,pid: %d,ppid: %d,cnt: %d\n",getpid(),getppid(),cnt);
//         sleep(1);
//         cnt--;
//     }
//}
//void createSubProcess(int n,callback_t cb)
//{
//    for(int i = 0;i < n;i++)
//    {
//        sleep(1);
//        pid_t id = fork();
//        if(id == 0)
//        {
//           printf("create child process success: %d\n", i);
//           //child
//           cb();
//           exit(0);
//        }
//    }
//}



int main()
{
    //flag 1
    //createSubProcess(N,Worker);    
    //sleep(100);//只有父进程能走到这里，子进程都在上面exit被终止了



    //for(int i = 0;i < 200;i++)
    //{
    //   printf("%d: %s\n",i,strerror(i));//打印不同退出码对应的含义
    //}



    printf("Begin:%d\n",errno);
    FILE* fp = fopen("./log.txt","r");
    if(fp == NULL)
    {
       printf("After:%d, error string:%s\n",errno,strerror(errno));
       return errno;
    }

    return 0;//return返回的数字分别代表不同的意思，0表示成功，非0表示失败
}
